package com.colobu.fastjson;
import com.colobu.test.Teacher;
import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.test.JerseyTest;
import org.glassfish.jersey.test.TestProperties;
import org.junit.Test;
import javax.ws.rs.GET;
import javax.ws.rs.InternalServerErrorException;
import javax.ws.rs.Path;
import javax.ws.rs.core.Application;
import java.util.Date;
import static org.junit.Assert.*;
/*
Only handles specific classes by pass class type array to FastJsonProvider's constructor.
*/
public class ClassDefinitionFastJsonProviderTest extends JerseyTest {
@Path("teacher")
public static class TeacherResource {
@GET
public Teacher getTeacher() {
Teacher teacher = new Teacher();
teacher.setId(12345L);
teacher.setName("smallnest");
teacher.setCreatedOn(new Date());
return teacher;
}
}
@Path("user2")
public static class UserResource {
@GET
public User getUser() {
User user = new User();
user.setId(12345L);
user.setName("smallnest");
user.setCreatedOn(new Date());
return user;
}
}
@Override
protected void configureClient(ClientConfig config) {
Class<?>[] jsonTypes = {User.class};
config.register(new FastJsonFeature()).register(new FastJsonProvider(jsonTypes));
}
@Override
protected Application configure() {
enable(TestProperties.LOG_TRAFFIC);
enable(TestProperties.DUMP_ENTITY);
ResourceConfig config = new ResourceConfig();
Class<?>[] jsonTypes = {User.class};
config.register(new FastJsonFeature()).register(new FastJsonProvider(jsonTypes));
config.packages("com.colobu.fastjson", "com.colobu.test");
return config;
}
@Test
public void testWriteTo() {
final String user = target("user2").request().accept("application/json").get(String.class);
// {"createdOn":1412036891919,"id":12345,"name":"smallnest"}]
assertTrue(user.indexOf("createdOn") > 0);
assertTrue(user.indexOf("\"id\":12345") > 0);
assertTrue(user.indexOf("\"name\":\"smallnest\"") > 0);
}
@Test
public void testReadFrom() {
final User user = target("user2").request().accept("application/json").get(User.class);
assertNotNull(user);
assertNotNull(user.getCreatedOn());
assertEquals(user.getId().longValue(), 12345L);
assertEquals(user.getName(), "smallnest");
}
@Test(expected=InternalServerErrorException.class)
public void testWriteToForTeacher() {
final String teacher = target("teacher").request().accept("application/json").get(String.class);
assertTrue(teacher.indexOf("createdOn") > 0);
assertTrue(teacher.indexOf("\"id\":12345") > 0);
assertTrue(teacher.indexOf("\"name\":\"smallnest\"") > 0);
}
@Test(expected=InternalServerErrorException.class)
public void testReadFromForTeacher() {
final Teacher teacher = target("teacher").request().accept("application/json").get(Teacher.class);
assertNotNull(teacher);
assertNotNull(teacher.getCreatedOn());
assertEquals(teacher.getId().longValue(), 12345L);
assertEquals(teacher.getName(), "smallnest");
}
}